{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import datetime\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from lxml import etree\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "What is the sentiment of this news? Answer:{very negative/negative/neutral/positive/very positive}\n"
     ]
    }
   ],
   "source": [
    "# The base_path should be the results with labels generated in ../data_preparations/add_labels.py\n",
    "base_path = r\"C:\\Users\\Olive\\python_projects\\FinRL-Meta\\FinGPT-ChatGLM-Fineturning_old\\Chinese_News\\scrape\\content_with_labels\"\n",
    "columns = [\"instruction\",\"input\",\"output\"]\n",
    "instruction = \"What is the sentiment of this news? Answer:{very negative/negative/neutral/positive/very positive}\"\n",
    "\n",
    "file_list = os.listdir(base_path)\n",
    "print(instruction)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Title/标题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 216/216 [00:33<00:00,  6.47it/s]\n"
     ]
    }
   ],
   "source": [
    "dataset = pd.DataFrame(columns= columns)\n",
    "for file_name in tqdm(file_list):\n",
    "    df = pd.read_csv(os.path.join(base_path, file_name))\n",
    "    df[\"input\"] = df.apply(lambda x: f'今天的日期为：{x[\"publish_date\"]}。\\n新闻标题为：\\\"{x[\"post_title\"]}\\\"。', axis = 1)\n",
    "    df[\"instruction\"] = instruction\n",
    "    df['output'] = df[\"label\"]\n",
    "    tmp = df[columns+[\"date\"]]\n",
    "    dataset = pd.concat([dataset, tmp])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instruction</th>\n",
       "      <th>input</th>\n",
       "      <th>output</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2023-04-07。\\n新闻标题为：\"平安银行：融资净买入3199.17万元...</td>\n",
       "      <td>No data</td>\n",
       "      <td>2023-04-07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2023-04-07。\\n新闻标题为：\"平安银行今日大宗交易折价成交198万股...</td>\n",
       "      <td>No data</td>\n",
       "      <td>2023-04-06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2023-04-06。\\n新闻标题为：\"平安银行：融资净偿还1627.94万元...</td>\n",
       "      <td>No data</td>\n",
       "      <td>2023-04-06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2023-04-05。\\n新闻标题为：\"平安银行04月04日被深股通减持301...</td>\n",
       "      <td>No data</td>\n",
       "      <td>2023-04-05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2023-04-02。\\n新闻标题为：\"平安银行本周深股通持股市值增加1.09...</td>\n",
       "      <td>No data</td>\n",
       "      <td>2023-04-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>977</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2021-04-22。\\n新闻标题为：\"德业股份一字涨停，年报业绩同比增加47...</td>\n",
       "      <td>very negative</td>\n",
       "      <td>2021-04-21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>978</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2021-04-21。\\n新闻标题为：\"德业股份今日正式登陆沪市主板 多元化发...</td>\n",
       "      <td>negative</td>\n",
       "      <td>2021-04-20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2021-04-21。\\n新闻标题为：\"N德业（605117）龙虎榜数据（04...</td>\n",
       "      <td>negative</td>\n",
       "      <td>2021-04-20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>980</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2021-04-21。\\n新闻标题为：\"德业股份封涨停板 三机构卖出64万元\"。</td>\n",
       "      <td>negative</td>\n",
       "      <td>2021-04-20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>981</th>\n",
       "      <td>What is the sentiment of this news?\\nAnswer:{v...</td>\n",
       "      <td>今天的日期为：2021-04-21。\\n新闻标题为：\"德业股份今日上市交易 首日达到44%的...</td>\n",
       "      <td>negative</td>\n",
       "      <td>2021-04-20</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>495601 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           instruction  \\\n",
       "0    What is the sentiment of this news?\\nAnswer:{v...   \n",
       "1    What is the sentiment of this news?\\nAnswer:{v...   \n",
       "2    What is the sentiment of this news?\\nAnswer:{v...   \n",
       "3    What is the sentiment of this news?\\nAnswer:{v...   \n",
       "4    What is the sentiment of this news?\\nAnswer:{v...   \n",
       "..                                                 ...   \n",
       "977  What is the sentiment of this news?\\nAnswer:{v...   \n",
       "978  What is the sentiment of this news?\\nAnswer:{v...   \n",
       "979  What is the sentiment of this news?\\nAnswer:{v...   \n",
       "980  What is the sentiment of this news?\\nAnswer:{v...   \n",
       "981  What is the sentiment of this news?\\nAnswer:{v...   \n",
       "\n",
       "                                                 input         output  \\\n",
       "0    今天的日期为：2023-04-07。\\n新闻标题为：\"平安银行：融资净买入3199.17万元...        No data   \n",
       "1    今天的日期为：2023-04-07。\\n新闻标题为：\"平安银行今日大宗交易折价成交198万股...        No data   \n",
       "2    今天的日期为：2023-04-06。\\n新闻标题为：\"平安银行：融资净偿还1627.94万元...        No data   \n",
       "3    今天的日期为：2023-04-05。\\n新闻标题为：\"平安银行04月04日被深股通减持301...        No data   \n",
       "4    今天的日期为：2023-04-02。\\n新闻标题为：\"平安银行本周深股通持股市值增加1.09...        No data   \n",
       "..                                                 ...            ...   \n",
       "977  今天的日期为：2021-04-22。\\n新闻标题为：\"德业股份一字涨停，年报业绩同比增加47...  very negative   \n",
       "978  今天的日期为：2021-04-21。\\n新闻标题为：\"德业股份今日正式登陆沪市主板 多元化发...       negative   \n",
       "979  今天的日期为：2021-04-21。\\n新闻标题为：\"N德业（605117）龙虎榜数据（04...       negative   \n",
       "980    今天的日期为：2021-04-21。\\n新闻标题为：\"德业股份封涨停板 三机构卖出64万元\"。       negative   \n",
       "981  今天的日期为：2021-04-21。\\n新闻标题为：\"德业股份今日上市交易 首日达到44%的...       negative   \n",
       "\n",
       "           date  \n",
       "0    2023-04-07  \n",
       "1    2023-04-06  \n",
       "2    2023-04-06  \n",
       "3    2023-04-05  \n",
       "4    2023-04-02  \n",
       "..          ...  \n",
       "977  2021-04-21  \n",
       "978  2021-04-20  \n",
       "979  2021-04-20  \n",
       "980  2021-04-20  \n",
       "981  2021-04-20  \n",
       "\n",
       "[495601 rows x 4 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset = dataset[dataset.output != \"No data\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2011-05-12', '2011-05-13', '2011-05-16', ..., '2023-03-29',\n",
       "       '2023-03-30', '2023-03-31'], dtype=object)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.date.sort_values().unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='date'>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset.groupby(\"date\").date.count().plot()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#####  Test from 2022-04-01 till 2023-03-31\n",
    "#####  Train & valid from 2011-05-12 till 2022-03-31"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(354608, 4)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset[dataset.date<\"2022-04-01\"].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(492549, 4)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "今天的日期为：2023-04-08。\n",
      "新闻标题为：\"德业股份：融资净偿还759.19万元，融资余额4.73亿元（04-07）\"。\n"
     ]
    }
   ],
   "source": [
    "print(df[\"input\"][0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Train & valid\n",
    "train_valid = dataset[dataset.date < \"2022-04-01\"][columns]\n",
    "train_valid.to_csv(\"content/dataset_title_train_and_valid.csv\", index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Test\n",
    "test = dataset[dataset.date >= \"2022-04-01\"][columns]\n",
    "test.to_csv(\"content/dataset_title_test.csv\", index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_list = []\n",
    "for item in train_valid.itertuples():\n",
    "    tmp = {}\n",
    "    tmp[\"instruction\"] = item.instruction\n",
    "    tmp[\"input\"] = item.input\n",
    "    tmp[\"output\"] = item.output\n",
    "    data_list.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# To Json\n",
    "import json\n",
    "with open(\"content/dataset_title_train_and_valid.json\", \"w+\", encoding='utf-8') as f:\n",
    "    json.dump(data_list, f, ensure_ascii= False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# To Json\n",
    "import json\n",
    "with open(\"content/dataset_title_test.json\", \"w+\", encoding='utf-8') as f:\n",
    "    json.dump(data_list, f, ensure_ascii= False)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Contetn/内容"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_content(x):\n",
    "    try:\n",
    "        tree = etree.HTML(x)\n",
    "        content = tree.xpath(\"//*[name(.)!='style']/text()\")\n",
    "        content = \"\".join(content)\n",
    "        content = content.replace(\"\\u3000\", '')\n",
    "        return content\n",
    "    except:\n",
    "        return np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 216/216 [01:13<00:00,  2.94it/s]\n"
     ]
    }
   ],
   "source": [
    "dataset_content = pd.DataFrame(columns= columns)\n",
    "for file_name in tqdm(file_list):\n",
    "    df = pd.read_csv(os.path.join(base_path, file_name))  \n",
    "    df['input'] = df['post_content'].apply(get_content)\n",
    "    df = df.dropna(subset=['input'])\n",
    "    df[\"input\"] = df.apply(lambda x: f'今天的日期为：{x[\"publish_date\"]}。\\n新闻内容为：\\\"{x[\"input\"]}\\\"。', axis = 1)\n",
    "    df[\"instruction\"] = instruction\n",
    "    df['output'] = df[\"label\"]\n",
    "    tmp = df[columns+[\"date\"]]\n",
    "    dataset_content = pd.concat([dataset_content, tmp])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "今天的日期为：2023-04-08。\n",
      "新闻内容为：\"来源：东方财富Choice数据 作者：财智星 德业股份融资融券信息显示，2023年4月7日融资净偿还759.19万元；融资余额4.73亿元，较前一日下降1.58%。融资方面，当日融资买入1179.84万元，融资偿还1939.03万元，融资净偿还759.19万元。融券方面，融券卖出6.12万股，融券偿还1.77万股，融券余量41.18万股，融券余额1.02亿元。融资融券余额合计5.75亿元。德业股份融资融券交易明细（04-07）德业股份历史融资融券数据一览免责声明：本文基于大数据生产，仅供参考，不构成任何投资建议，据此操作风险自担。（文章来源：东方财富Choice数据） [点击查看原文]\"。\n"
     ]
    }
   ],
   "source": [
    "print(df[\"input\"][0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(492527, 4)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset_content = dataset_content[dataset_content.output != \"No data\"]\n",
    "dataset_content.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(492523, 5)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset_content[\"total_len\"] = dataset_content[\"input\"].apply(lambda x:len(x.split(\" \")))\n",
    "dataset_content = dataset_content[dataset_content[\"total_len\"] < 1000]\n",
    "dataset_content.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "796"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset_content[\"total_len\"].max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Train & valid\n",
    "train_valid = dataset_content[dataset_content.date < \"2022-04-01\"][columns]\n",
    "train_valid.to_csv(\"content/dataset_content_train_and_valid.csv\", index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Test\n",
    "test = dataset_content[dataset_content.date >= \"2022-04-01\"][columns]\n",
    "test.to_csv(\"content/dataset_content_test.csv\", index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_list = []\n",
    "for item in train_valid.itertuples():\n",
    "    tmp = {}\n",
    "    tmp[\"instruction\"] = item.instruction\n",
    "    tmp[\"input\"] = item.input\n",
    "    tmp[\"output\"] = item.output\n",
    "    data_list.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "with open(\"content/dataset_content_train_and_valid.json\", \"w+\", encoding='utf-8') as f:\n",
    "    json.dump(data_list, f, ensure_ascii= False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instruction</th>\n",
       "      <th>input</th>\n",
       "      <th>date</th>\n",
       "      <th>total_len</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>output</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>negative</th>\n",
       "      <td>74125</td>\n",
       "      <td>74125</td>\n",
       "      <td>74125</td>\n",
       "      <td>74125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>neutral</th>\n",
       "      <td>114563</td>\n",
       "      <td>114563</td>\n",
       "      <td>114563</td>\n",
       "      <td>114563</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>positive</th>\n",
       "      <td>64071</td>\n",
       "      <td>64071</td>\n",
       "      <td>64071</td>\n",
       "      <td>64071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>very negative</th>\n",
       "      <td>45513</td>\n",
       "      <td>45513</td>\n",
       "      <td>45513</td>\n",
       "      <td>45513</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>very positive</th>\n",
       "      <td>55632</td>\n",
       "      <td>55632</td>\n",
       "      <td>55632</td>\n",
       "      <td>55632</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               instruction   input    date  total_len\n",
       "output                                               \n",
       "negative             74125   74125   74125      74125\n",
       "neutral             114563  114563  114563     114563\n",
       "positive             64071   64071   64071      64071\n",
       "very negative        45513   45513   45513      45513\n",
       "very positive        55632   55632   55632      55632"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset_content[dataset_content.date < \"2022-04-01\"].groupby(\"output\").count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset_content[dataset_content.date < \"2022-04-01\"].output.hist()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "finrl",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
